home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
UTILHIVE
/
PKLT10.LZH
/
LZEXE.DOC
< prev
next >
Wrap
Text File
|
1989-12-24
|
13KB
|
270 lines
Documentation pour:
-------------------
LZEXE.EXE v0.91 (c) 1989 Fabrice BELLARD
Compacteur de fichiers EXE.
Ce programme fait parti du domaine public (FREEWARE), donc vous pouvez
l'utiliser, le copier et le distribuer sans problème. Et vous pouvez même
en faire un usage commercial, c'est à dire compacter des fichiers EXE que
vous allez vendre. Mais la vente de LZEXE.EXE est interdite.
Matériel: PC et compatibles, microprocesseur 80286 ou 80386 recommandé
pour une plus grande vitesse d'exécution.
Mémoire nécessaire: 128 Ko minimum pour lancer LZEXE.
1-Présentation
--------------
Ce logiciel compacte des fichiers EXE, c'est-à-dire les fichiers
EXEcutable du monde des PC. Mais vous pourriez me dire que beaucoup de
logiciels compactent des fichiers EXE mieux que celui-ci, ne serait-ce
que l'excellent PKZIP ou bien LHARC. Mais l'avantage de ce programme
c'est que vos fichiers EXE une fois compactés peuvent être lancés ! Et le
décompactage est si rapide que pour pratiquement tous les fichiers, ce
temps de décompactage est négligeable ! De plus le décompacteur n'utilise
aucun espace supplémentaire sur disque ou en mémoire vive dans un disque
virtuel par exemple: il n'utilise que la RAM réservée normalement au
fichier EXE décompacté. De plus j'ai beaucoup optimisé mon algorithme de
compactage en vitesse mais aussi en efficacité: les fichiers EXE sont
presque aussi petits que les fichiers ZIP correspondants et bien plus
compacts que les anciens fichiers ARC. Mais d'autres versions de LZEXE
suivront qui je l'espère iront encore plus vite et genèreront des
fichiers plus compacts.
2-Utilisation de LZEXE
----------------------
C'est très simple: il suffit de taper sous DOS:
LZEXE nomfichier[.EXE]
où "nomfichier" est le nom du fichier EXE que vous voulez compacter.
L'extension .EXE est ajoutée par défaut. Le fichier compacté est créé
dans le répertoire par défaut.
Attention ! Certains fichiers ne sont EXE que par leur nom: en effet,
pour le DOS, ce n'est pas l'extension .EXE qui caractérise ce type de
fichier, c'est le fait qu'il y ait au début les lettres "MZ" suivies de
quelques octets qui indiquent la longueur du fichier, la taille mémoire
qu'il occupe, etc... Ainsi certaines personnes n'hésitent pas à renommer
des fichiers COM en EXE, et cela explique que LZEXE refuse certains
fichiers EXE qui ne sont que des COM renommés.
Mais il existe une méthode pour faire accepter des fichiers COM à
LZEXE: il suffit d'utiliser COMTOEXE du même auteur qui convertit ces
derniers en EXE (il fait l'inverse de EXE2BIN).
Pour plus de sûreté, LZEXE n'efface pas votre ancien fichier EXE: il le
renomme en *.OLD. De plus, il crée le fichier temporaire LZEXE.TMP qui
n'est renommé en *.EXE qu'à la fin du compactage.
3-Conseils d'utilisation
------------------------
Pour certains fichiers, le compactage peut ne pas fonctionner pour
plusieurs raisons:
- Le fichier que vous avez spécifié n'est pas un vrai EXE. Solution:
utiliser COMTOEXE.EXE
- La table de relocation est trop grande. Pour comprendre ce message,
il est nécessaire de connaître la structure interne d'un fichier EXE: un
tel fichier peut s'étaler sur plusieurs segments à la différence des
fichiers COM. C'est pourquoi il lui faut une table de valeurs qui indique
dans quel segment se font les branchements ou les appels de sous
programmes par exemple. Et si le fichier est très long, cette table peut
être très encombrante et empêcher le compacteur d'agir. Néanmoins, j'ai
prévu 16000 adresses de relocation, ce qui devrait suffire pour tous les
fichiers EXE, même les plus gros.
- Le fichier que vous avez spécifié a déjà été compacté avec LZEXE.
Notons qu'un autre compacteur de fichiers existe: EXEPACK.EXE de
Microsoft. Mais il est de loin beaucoup moins efficace que le mien, et
même si votre fichier EXE est déjà compacté avec ce programme, LZEXE
pourra encore beaucoup compacter. Mais dans ce cas, un message de mise en
garde vous est présenté, car il existe un autre utilitaire du même
auteur: UPACKEXE qui permet de décompacter ces fichiers et ainsi les
gains sont encore plus importants.
- Le compactage n'a pas été assez efficace et fait perdre de l'espace
sur disque: Hé oui, ça peut arriver, mais généralement avec les petits
EXE (moins de 2 Ko). Sinon, vous pourrez pratiquement toujours gagner
quelques octets.
- Le fichier EXE contient des overlays internes: ce sont des morceaux
de programme qui se trouvent dans le fichier EXE mais qui sont chargés
seulement quand le programme principal en a besoin. LZEXE ne peut pas les
compacter car il faudrait modifier le routines de chargement qui sont
dans le programme principal, et malheureusement ces routines dépendent du
compilateur et du programmeur. Dans la version 0.91, LZEXE vous met en
garde de leur présence. Mais dans beaucoup de cas, la différence entre la
longueur du fichier EXE sur disque et la longueur du code chargé est
minime (moins de 1024 octets) : dans ce cas, vous pouvez quand même
compacter car il s'agit de "marques" laissées par certains compilateurs.
Plus grave: certains fichiers EXE compactés "planteront" la machine:
- Si le programme EXE fait un test sur la taille ou sur son intégrité
sur disque (c'est très rare).
- S'il contient des overlays, qui doivent être chargés ensuite et donc
qui doivent occuper des positions fixes dans le fichier.
- Pour les programmes qui marchent sous Windows (de Microsoft): ce ne
sont pas de vrais EXE, donc ils refuseront de fonctionner correctement
sous l'intégrateur.
(cette liste n'est pas exhaustive)
Moins grave: Certains programmes possèdent des options de configuration
qui modifient le fichier EXE (Turbo Pascal par exemple). Dans ce cas, il
faut d'abord configurer le programme puis le compacter et conserver une
version non compactée pour pouvoir la modifier.
4-Du point de vue technique (pour les connaisseurs !)
-----------------------------------------------------
L'algorithme de compactage que j'ai fait est fondé sur la fameuse
méthode de Ziv Lempel utilisant un buffer "circulaire" (ring buffer) et
une méthode de recherche des répétitions de séquences d'octets par des
arbres. Le codage de la position et la longueur de la chaîne qui se
répètent est optimisé par un algorithme annexe inspiré de la méthode de
Huffman. Les octets non compactés sont envoyés tels quels dans le fichier
car un algorithme de compression annexe ( comme "Adaptive Huffman" (voir
LHARC) ou avec des arbres de Shanon-Fano (voir PKZIP)) aurait nécessité
un temps de décompactage plus important et surtout un décompacteur plus
complexe et long, ce qui aurait en fait allongé le fichier EXE compacté.
Le décompacteur est logé à la fin du fichier EXE et fait 395 octets de
long pour la version 0.90 et 330 pour la version 0.91. Il doit:
- Contrôler le CRC pour s'assurer que personne ne l'a modifié (utile
contre les virus). Si oui, afficher le message: "CRC Error". Cette option
a été enlevée dans LZEXE v0.91 car elle allonge inutilement le fichier
EXE et le temps de décompactage. De plus le contrôle du CRC n'était fait
que sur le décompacteur.
- Se déplacer en haut de la RAM, puis déplacer le code compacté pour
laisser un peu de place au fichier EXE
- Décompacter le code, en contrôlant qu'il est correct, et surtout
ajuster les segments si on dépasse 64 Ko (ce qui m'a posé des problèmes
en terme de vitesse)
- Décompacter la table de relocation, et mettre à jour les adresses
relogeables de fichiers EXE. C'est ici que LZEXE v0.91 a été modifié: la
table de relocation est beaucoup mieux compactée.
- Lancer le programme en mettant à jour CS,IP,SS,SP
C'est tout !!!
Ce décompacteur est à lui seul un petit chef-d'oeuvre de programmation
en assembleur 8086: inutile de vous dire que sa mise au point a été assez
longue.
Mais le compacteur m'a aussi posé pas mal de problèmes, notamment pour
mettre à jour tous les pointeurs que le décompacteur utilise par la
suite.
5-LZEXE version 0.91 et les autres compacteurs
----------------------------------------------
PKARC (dernière version): LZEXE fait beaucoup mieux, le "crunching"
(alias Shrinking pour PKZIP) étant un algorithme dépassé...
PKZIP v0.92: LZEXE mieux dans pratiquement tous les cas.
PKZIP v1.02: sur les gros fichiers, LZEXE fait mieux. sinon, la
différence est assez faible.
LHARC v1.01: il fait mieux que LZEXE avec "freezing" sur les petits
fichiers.
LARC: LZEXE fait mieux.
Remarques importantes:
- On ne peut pas vraiment comparer ce que fait LZEXE avec les autres
compacteurs puisque dans les fichiers EXE compactés par mon soft il y a
aussi un décompacteur qui le lance tout seul. Néanmoins les autres
compacteurs peuvent faire des fichiers "self-extracting", mais ils
décompactent sur disque, sont lents et ajoutent plusieurs dizaines de Ko
aux fichier compactés (sauf pour LARC et LHARC qui n'ajoutent qu'1 ou 2
Ko, mais qui ne décompactent que sur disque malheureusement).
- Dans presque tous les cas, les compacteurs que j'ai cités ne pourront
pas recompacter plus un fichier déjà réduit avec LZEXE, ce qui montre son
efficacité. Seul LHarc arrive à gagner quelques octets.
6-L'avenir...
-------------
- je pense aussi à un décompacteur automatique de documentation du
genre de LISEZMOI.COM ou LIST.COM qui serait très commode et peut être
que je vais en faire un.
- Enfin, j'espère faire un compacteur "universel" comme PKZIP ou LHARC
plus lent que LZEXE en décompactage mais qui fera beaucoup mieux que ces
derniers.
7-Mises en garde et voeux...
---------------------------
J'espère que LZEXE et les fichiers EXE compactés par lui seront
beaucoup diffusés ce qui m'incitera à faire d'autres versions plus
rapides...
Je décline toute responsabilité en cas de perte d'information
occasionné par LZEXE. Mais rassurez-vous, les algorithmes sont fiables et
je ne crois pas qu'il y ait beaucoup de bugs.
Attention ! Je ne vous conseille pas de compacter et de diffuser des
logiciels commerciaux protégés par un copyright: les auteurs risquent
d'êtres mécontents...
Mais si vous faites un FREEWARE, un SHAREWARE, ou même un programme
commercial, rien ne vous empêche de le compacter avec LZEXE, et même je
vous le conseille:
- Vos fichiers EXE seront plus petits et on croira que vos programmes
compilés seront faits en assembleur. Que dirons vos concurrents quand ils
verront des programmes qui font la même chose que les leurs mais 30% plus
petits ? De plus vous pourrez mettre sur disquette (et sur disque dur)
plus de programmes, car on a toujours besoin d'une plus grande mémoire de
masse...
- Le compactage constitue un excellent codage qui peut empêcher des
personnes peu recommandables de modifier les messages ou bien de voir vos
algorithmes secrets à moins de désassembler le décompacteur, ce qui
risque de n'être pas très facile, c'est moi qui vous le dit !
Voilà, en espérant que ce soft vous servira et qu'il ne possède pas
trop de bugs !
Fabrice.
Voici mon adresse si vous voulez des infos sur les algorithmes ou si
vous avez des problèmes:
Fabrice BELLARD
451,chemin du mas de Matour
34790 GRABELS (FRANCE)
Mon pseudo sur RTEL ou QBBS: FAB
Evolution des versions:
LZEXE v0.91:
------------
- Le tiret "-" n'était pas accepté dans le noms de fichiers, cela a été
corrigé.
- LZEXE signale la présence des overlays internes.
- LZEXE indique si le fichier a déjà été compacté avec EXEPACK de
Microsoft.
- Un bug de la version 0.90 faisait occuper trop de mêmoire aux
fichiers EXE: cela a été corrigé.
- Le compactage de la table de relocation a été amélioré.
- Le contrôle du CRC a été enlevé.
- La taille du décompacteur est passée de 395 à 330 octets.